﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccessLayer.Properties;
using System.Reflection;
using System.Diagnostics.Contracts;

namespace DataAccessLayer
{
    public static class ProviderFactory
    {
        public static IDataProvider CreateProvider()
        {
            // Создание провайдера по данным настроек
            object providerObj = Assembly.GetExecutingAssembly().CreateInstance(Settings.Default.DataProvider, true);

            if (providerObj == null)
            {
                throw new Exception(string.Format("Не удалось создать провайдер {0}", Settings.Default.DataProvider));
            }

            // Вызываем исключение если объект не реализует IDataProvider
            IDataProvider provider = providerObj as IDataProvider;
            if (provider == null)
            {
                throw new Exception(string.Format("{} не реализует IDataProvider.", Settings.Default.DataProvider));
            }

            return provider;
        }
    }
}
